#include <REGX52.H>       // 包含51单片机P2口所在的头文件，定义了特殊功能寄存器
#include <INTRINS.H>      // 包含 intrinsics 头文件，提供_nop_()等内联函数

void Delay500ms()         //@12.000MHz
// 延时500ms函数，注释说明单片机晶振频率为12MHz
{
    unsigned char i, j, k;  // 定义三个无符号字符型变量用于循环计数

    _nop_();               // 空操作指令，消耗1个机器周期，用于精确延时
    i = 4;                 // 外层循环计数器初始化为4
    j = 205;               // 中层循环计数器初始化为205
    k = 187;               // 内层循环计数器初始化为187
    
    do                     // 开始do-while循环结构
    {
        do
        {
            while (--k);   // 内层循环：k先自减1，然后判断是否为0，不为0则继续循环
        } while (--j);     // 中层循环：j先自减1，然后判断是否为0，不为0则继续执行内层循环
    } while (--i);         // 外层循环：i先自减1，然后判断是否为0，不为0则继续执行中层循环
}

void main()                // 主函数，程序入口点
{
    while(1)               // 无限循环，使程序持续运行
    {
        P2 = 0xFE;         // 将P2口赋值为1111 1110（二进制），即最低位LED亮
                           // 在51单片机中，通常P2口连接LED，0为亮，1为灭
        Delay500ms();      // 调用延时函数，保持当前状态500ms
        
        P2 = 0xFF;         // 将P2口赋值为1111 1111（二进制），即所有LED熄灭
        Delay500ms();      // 再次调用延时函数，保持熄灭状态500ms
    }
}